package com.hy;

import java.util.Arrays;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:只出现一次的数字
 * 给你一个整数数组 nums ，除某个元素仅出现一次外，
 * 其余每个元素都恰出现两次次 。请你找出并返回那个只出现了一次的元素。
 * author: Mr.Du
 * Date: 2022/11/20
 * Time: 23:50
 */
public class SingleNumber {
    
    public static void main(String[] args) {
        SingleNumber number = new SingleNumber();
        int res = number.singleNumber(new int[]{1, 1, 2, 3, 4, 5, 4, 3, 2, 5, 0, 0, 10 });
        System.out.println(res);
        
        res = number.singleNumber1(new int[]{1, 1, 2, 3, 4, 5, 4, 3, 2, 5, 0  });
        System.out.println(res);
    }
    
    /**
     * 思路：利用位运算，异或操作，利用i ^ i = 0, 0 ^ i = i;
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {
        int res = 0;
        for(int i : nums){
            res ^= i;
        }
        return res;
    }
    
    /**
     * 思路：排序操作
     * @param nums
     * @return
     */
    public int singleNumber1(int[] nums) {
        Arrays.sort(nums);
        int res = 0;
        for(int i = 0;i < nums.length - 1;){
            if(nums[i] == nums[i+1]){
                res = nums[i];
                i += 2;
            }else{
                return nums[i];
            }
        }
        return nums[nums.length-1];
    }
}
